/*********************************************************************
* 版权所有(C)   凌聪
* 项目代号:     代码整理
* 文件名称:     UdpSocket.h
* 运行平台:     Linux
* 编译环境:     C++编译器--G++
* 程序语言:     c++
* 作   者：     凌聪
* 内容摘要:     UdpSock相关操作
* 开始日期:     2020年02月20日
***********************************************************************/

#ifndef UDPSOCKET_H
#define	UDPSOCKET_H

#include <stdio.h>
#include <stddef.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <errno.h>
#include <netdb.h>
#include <net/if.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <unistd.h>

#ifndef D
#define D        printf("udp socket: ");printf
#endif

#define MAX_IP_SIZE 16

class UdpSocket {
public:
    
    UdpSocket();
    UdpSocket(int port);
    UdpSocket(char *ipAddr, int port);
    UdpSocket(const UdpSocket& orig);
    virtual ~UdpSocket();
    
    void setTimeout(unsigned int s, unsigned int us);
    void setSendTimeout(unsigned int s, unsigned int us);
    void setRecvTimeout(unsigned int s, unsigned int us);
    
    void setRemoteTarget(char *ipAddr, int port);
    
    int send2Target(char *sendBuf, int length);
    int send2Recv(char *sendBuf, int length);
    int send(char *ipAddr, int port, char *sendBuf, int length);
    int recv(char *recvBuf, int length);
    
    int getFd(){ return sockFd; }
    int getLocalPort(){ return localPort; }
    
    static int getLocalIp(char *eth_inf, char *ip);
    static int getLocalMac(char *eth_inf, char *mac);
    
private:

    int localPort;
    int sockFd;
    
    struct sockaddr_in remoteSock;
    struct sockaddr_in recvSock;
};

#endif	/* UDPSOCKET_H */

